#ifndef GREEDY_ALLOCATION_H
#define GREEDY_ALLOCATION_H

#include "ns3/object.h"
#include "channel-allocation.h"

namespace ns3 {

/**
 * \ingroup sagin
 * \brief 贪心信道分配算法 - 基于SINR最大化
 */
class GreedyAllocation : public ChannelAllocation
{
public:
    /**
     * \brief Get the TypeId
     * \return The TypeId
     */
    static TypeId GetTypeId();
    
    GreedyAllocation();
    virtual ~GreedyAllocation();
    
protected:
    /**
     * 实现贪心信道分配算法
     * \return 节点到信道的映射
     */
    virtual std::map<uint32_t, int> AllocateChannels();
    
    /**
     * 计算节点在指定信道上的得分（SINR - 负载因子）
     * \param nodeId 节点ID
     * \param channelId 信道ID
     * \return 得分值
     */
    double CalculateChannelScore(uint32_t nodeId, int channelId, const std::map<uint32_t, int>& currentAllocation);
    
    // 实现纯虚函数
    virtual void LogAllocationResults() override;
};

} // namespace ns3

#endif /* GREEDY_ALLOCATION_H */
